package design.templatemethod;

/**
 * 模板方法模式
 * 可以在在方法内部定义固定的算法，方法即模板
 *
 * @Author: zhenzhong.wang@honeywell.com
 * @Date: 2019/12/26/026 下午 9:51
 */
public abstract class BaseRecipeClass {

  final void prepareRecipe() {
    boilWater();
    pourInCup();

    addCondiments();

    // 钩子方法，默认什么都不做，子类可以根据需要选择是否覆盖
    hook();
  }

  abstract void addCondiments();

  final private void boilWater() {
    System.out.println("boil water");
  }

  final private void pourInCup() {
    System.out.println("pour in cup");
  }

  void hook() {}
}
